
{% extends 'blog/base.html' %}


{% block postcontent %}

<div class="card post-bg-white">
    <!-- <img src="..." class="card-img-top" alt="..."> -->
    <div class="card-body" style="padding: 20px; ">
        <h2 class="card-title" style="text-align: center;">
            sqoop export导入任务失败但部分数据入库成功能问题
        </h2>
        <p class="post-subtitle" style="text-align: center;">
            <span>发表于: 2022-10-08</span>
            <span>分类: <a href="">Hadoop</a></span>
            <span>阅读量: 2022</span>
        </p>
        <div class="card-text">
                    问题分析
1、找到对应azkaban任务脚本，看到是利用 sqoop export 从hive从导出数据到mysql数据库表

2、查看 mysql 库表记录，只有100条，但是正常情况应该是200条记录

3、查看hive中对应的表，显示结果是200条。所以源头数据应该是没有问题的。

4、排查相关错误日志未发现有用信息。因为200条记录，导入了100条，那么是不是第101条数据有问题呢？

5、在hive执行分页查询 select * from xxx where dt='2022-09-15' limit 100, 1; 刚好看到第101条记录的部分字段合并在了一起，因为是0和Null合并，很明显

6、这个时候怀疑是数据源有问题，两个字段显示在一起 导致实际hive表中的字段个数和mysql表中的字段个数不一致导致的

7、又是各种找日志分析，未发现到有用信息，在另外一个主机上用普通用户登录hive查询的时候虽然有告警信息，但是第101行记录的显示确实正常的，没有出现字段显示在一起 的问题，那么就能真正的排除数据源的问题

8、这个时候暂停转而去了解 sqoop 的用法，看是否哪里用的不对，是在不同的用户下sqoop查询字段获取的问题，做实验也未验证到结果

9、然后再了解sqoop的过程中，get到sqoop export也是把任务转化成Hadoop的mapreduct job去执行的。其实在azkaban的错误日志中就有显示 INFO mapreduce.Job: Job job_1659629210017_4904 failed with state FAILED due to: Task failed task_1659629210017_4904_m_000000 只是当初没有注意到罢了，部分详细错误日志详见文末

10、了解大数据的都知道，mapreduct job 最终的调度和任务执行都是通过Yarn来进行的，在Hadoop job页面可以找到 报错的JOBID，进而可以找到该任务是调度到那个 NodeManager 去执行的，

11、登录执行的NodeManager 通过如下命令去获取详细的执行日志
                </div>
                <div class="post-tags">
                    标签: 
                    <span><a href="">python</a></span>
                    <span><a href="">django</a></span>
                    <span><a href="">linux</a></span>

                </div>
            </div>
        </div>





{% endblock %}